package com.alex.maze;

import com.alex.maze.graphics.Bitmap;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Art
{
    /*  Ucitavamo teksturu sa odredjenje lokacije. */
    public static Bitmap podovi = loadBitmap("/textures/floorSheet.png");
    public static Bitmap zidovi = loadBitmap("/textures/wallSheet.png");
    public static Bitmap sprajtovi = loadBitmap("/textures/spriteSheet.png");
    public static Bitmap font = loadBitmap("/textures/fontSheet.png");
    
    /*  Metoda za ucitavanje slike(resursa). */
    public static Bitmap loadBitmap(String imeFajla)
    {
        /* Sve sto se ucitava mora da se ide kroz try-catch! */
        try
        {
            /* Ucitavanje slike. */
            BufferedImage slika = ImageIO.read(Art.class.getResource(imeFajla));
            /*  Dimenzije slike (bitmap format, mozda objasnim kasnije?) */
            Bitmap rezultat = new Bitmap(slika.getWidth(), slika.getHeight());
            /*  Uzimamo vrednosti boja tacnije vrednost svakog piksela. */
            slika.getRGB(0, 0, slika.getWidth(), slika.getHeight(), rezultat.pikseli, 0, slika.getWidth()); 
            for (int i = 0; i < rezultat.pikseli.length; i++)
            {
                int in = rezultat.pikseli[i];
                int temp = (in & 0xF) >> 2;
                if (in == 0xFFFF00FF)
                {
                    temp = -1;
                }
                rezultat.pikseli[i] = temp;
            }
            return rezultat;
        }
        catch (IOException e)
        {
            /* Ako fajla(slike) nema onda nemoj da pokrenes program i baci RuntimeException */
            throw new RuntimeException(e);
        }
    }

    public static int getCol(int boja)
    {
        int r = (boja >> 16) & 0xFF;
        int g = (boja >> 8) & 0xFF;
        int b = (boja) & 0xFF;
        
        r = r * 55 / 0xFF;
        g = g * 55 / 0xFF;
        b = b * 55 / 0xFF;
        
        return r << 16 | g << 8 | b;
    }
}
